//#include <iostream>
//using namespace std;
//
//const int N = 25;
//int a[N] = { 0 };
//
//int path = 0;
//int ret = 0;
//int n, k;
//
//bool is_prime(int x)
//{
//	if (x == 1 || x == 0)
//		return 0;
//	if (x == 2 || x == 3)
//		return 1;
//	if (x % 2 == 0 || x % 3 == 0)
//		return 0;
//	for (int i = 5; i <= x / i; i += 6)
//	{
//		if (x % i == 0 || x % (i + 2) == 0)
//			return 0;
//	}
//
//	return 1;
//}
//
//void dfs(int pos, int begin)
//{
//	if (pos > k)
//	{
//		if (is_prime(path))
//		{
//			ret++;
//		}
//		return;
//	}
//	for (int i = begin; i <= n; i++)
//	{
//		path += a[i];
//		dfs(pos + 1, i + 1);
//		path -= a[i];
//	}
//}
//
//int main()
//{
//	cin >> n >> k;
//	for (int i = 1; i <= n; i++)
//	{
//		cin >> a[i];
//	}
//
//	dfs(1,1);
//
//	cout << ret << endl;
//	return 0;
//}
//
//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//struct node
//{
//	int t;
//	int d;
//	int l;
//}a[15];
//
//bool st[15] = { 0 };
//
//
//int n;
//
//bool dfs(int pos, int end)
//{
//	if (pos > n)
//		return true;
//
//	for (int i = 1; i <= n; i++)
//	{
//		if (st[i] == 1)
//			continue;
//		if (end > a[i].d + a[i].t)
//			continue;
//		st[i] = 1;
//		if (dfs(pos + 1, max(a[i].t, end) + a[i].l))
//			return 1;
//		st[i] = 0;
//	}
//
//	return 0;
//}
//
//int main()
//{
//	int T;
//	cin >> T;
//	while (T--)
//	{
//		for (int i = 1; i <= 15; i++)
//		{
//			st[i] = 0;
//		}
//		cin >> n;
//		for (int i = 1; i <= n; i++)
//		{
//			cin >> a[i].t >> a[i].d >> a[i].l;
//		}
//
//		if (dfs(1, 0))
//		{
//			cout << "YES" << endl;
//		}
//		else
//		{
//			cout << "NO" << endl;
//		}
//	}
//	return 0;
//}


//#include <iostream>
//#include <vector>
//using namespace std;
//
//const int N = 15;
//
//int a[N][N] = { 0 };
//int n;
//vector<int> path;
//bool col[N] = { 0 };
//bool st1[2 * N] = { 0 };
//bool st2[2 * N] = { 0 };
//int ret = 0;
//
//void dfs(int x)
//{
//	if (path.size() == n)
//	{
//		ret++;
//		if (ret <= 3)
//		{
//			for (const auto& ch : path)
//			{
//				cout << ch << " ";
//			}
//			cout << endl;
//		}
//	}
//
//	for (int i = 1; i <= n; i++)
//	{
//		if (col[i] == 1 || st1[x - i + n] == 1 || st2[x + i] == 1)
//			continue;
//		col[i] = 1;
//		st1[x - i + n] = 1;
//		st2[x + i] = 1;
//		path.push_back(i);
//		dfs(x + 1);
//		path.pop_back();
//		col[i] = 0;
//		st1[x - i + n] = 0;
//		st2[x + i] = 0;
//	}
//
//}
//
//int main()
//{
//	cin >> n;
//
//	dfs(1);
//
//	cout << ret << endl;
//	return 0;
//}


#include <iostream>
using namespace std;

const int N = 12;

int col[N][N] = {0};
int row[N][N] = {0};
int st[N][N][N] = { 0 };
int a[N][N] = { 0 };
int n = 9;

bool dfs(int x, int y)
{
	if (y ==n)
	{
		x++;
		y = 0;
	}

	if (x == n)
	{
		return true;
	}
	
	if (a[x][y])
	{
		return dfs(x, y + 1);
	}

	for (int i = 1; i <= 9; i++)
	{
		if (col[y][i] || row[x][i] || st[x / 3][y / 3][i])
			continue;
		a[x][y] = i;
		row[x][i] = 1;
		col[y][i] = 1;
		st[x / 3][y / 3][i] = 1;
		if (dfs(x, y + 1))
			return true;
		a[x][y] = 0;
		row[x][i] = 0;
		col[y][i] = 0;
		st[x / 3][y / 3][i] = 0;
	}

	return false;

}

int main()
{
	
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			cin >> a[i][j];
			if (a[i][j])
			{
				row[i][a[i][j]] = 1;
				col[j][a[i][j]] = 1;
				st[i / 3][j / 3][a[i][j]] = 1;
			}
		}
	}

	dfs(0,0);

	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}